<?php
/*
  Microblog bot for game release notifications
  Copyright (C) 2017  Alexander Yakovlev

  This program is free software: you can redistribute it and/or modify
  it under the terms of the GNU General Public License as published by
  the Free Software Foundation, either version 3 of the License, or
  (at your option) any later version.

  This program is distributed in the hope that it will be useful,
  but WITHOUT ANY WARRANTY; without even the implied warranty of
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  GNU General Public License for more details.

  You should have received a copy of the GNU General Public License
  along with this program.  If not, see <http://www.gnu.org/licenses/>.
*/

namespace Source;

use \Game;

class Hyperbook extends Source {
  public $title = "Гиперкнига";
  protected function parse() {
    $text = $this->get_text('http://hyperbook.ru/lib.php?sort=time');
    try {
      $this->dom->loadStr($text, []);
    } catch (\Exception $e) {
      echo $e->getMessage();
      echo $e->getTraceAsString();
      return "";
    }
    unset($text);
    $container = $this->dom->find('#listPubs');
    $games = [];
    try {
      $headings = $container->find("h3");
    } catch (\Exception $e ) {
      echo $e->getMessage();
      echo $e->getTraceAsString();
      return "";
    }
    foreach ($headings as $heading) {
      $game = new Game;
      $link = $heading->find('a')[0];
      $game->title = $link->innerHtml;
      $game->url = $link->getAttribute('href');
      $game->url = str_replace('file', 'http://hyperbook.ru/comments.php?id=', $game->url);
      $games[] = $game;
    }
    $i = 0;
    foreach ($container->find("div") as $author) {
      if ($author->getAttribute('style') !== 'text-align:left;margin-bottom:4px;') {
        continue;
      }
      $games[$i]->author = $author->innerHtml;
      $i++;
    }
    $i = 0;
    foreach ($container->find("div.small") as $small) {
      if(
        $small->getAttribute('style') === 'float: left; width: 20%; text-align:right;' &&
        is_null($games[$i]->date)
      ) {
        $games[$i]->date = $small->innerHtml;
      }
      elseif ($small->getAttribute('style') === NULL) {
        $games[$i]->description = $small->innerHtml;
        $i++;
      }
    }
    foreach ($games as $game) {
      $date = \DateTime::createFromFormat('d.m.y', $game->date);
      if ($date === false) continue;
      $date = $date->format('U');
      if ($date < $this->period) continue;

      $this->games[] = $game;
    }
  }
}
